# 将csv和json存储的数据可视化
"""csv 格式存储天气出局，找到两个不同地区在同一时间内的最高和最低气温，使用 matplotlib 创建图形展示变化
使用 json以 GeoJSON 格式春初地震数据，画散点图展示地震位置和强度"""
##解析csv文件头
from pathlib import Path
import csv
path = Path("../files/sitka_weather_2021_simple.csv")
lines = path.read_text().splitlines()
reader = csv.reader(lines)
print(type(reader))
print(lines)
print(reader)
header_row = next(reader)
print(header_row)

## 打印文件头 即 第一行各 index && value
for index,column_header in enumerate(header_row): ## enumerate用来读取列表索引值以及值
    print(index, column_header)


## 添加时间 datatime
from datetime import datetime
first_data = datetime.strptime("2021-07-01", "%Y-%m-%d") ## 此为示例
print(first_data)
### 上述为示例，现在开始改造代码
dates, highs = [],[]
print(reader)
for row in reader:
    current_date = datetime.strptime(row[2], "%Y-%m-%d")
    dates.append(current_date)
    high = int(row[4])
    highs.append(high)
print(dates)

## 提取并读取最大值数据
"""highs = []
print(reader)
for row2 in reader:
    high = int(row2[4])
    highs.append(high)
print(highs)
"""

"""注：获取时间和最大值可以放到一起写"""

## 绘制温度图
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

plt.style.use("seaborn-v0_8")
fig, ax = plt.subplots()
ax.plot(dates, highs, color = "red")
ax.set_xlabel("", fontsize = 16)
ax.set_ylabel("Temperature (F)", fontsize = 16)
fig.autofmt_xdate() ### 用来绘制倾斜的标签避免重叠
ax.tick_params(labelsize = 16)
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
plt.show()

